package com.controller.user;

import com.entity.ChatUser;
import com.entity.Message;
import com.service.user.ChatService;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

/** 聊天相关的控制器 */
@RestController
@CrossOrigin
public class ChatController {
  @Autowired ChatService chatService;

  /**
   * 返回用户编号为userId用户的未读消息总条数
   *
   * @param userId 用户编号
   * @return 未读消息总条数
   */
  @GetMapping("chat/getUnreadCount")
  public int getUnreadCount(@RequestParam("userId") String userId) {
    return chatService.getUnreadCount(userId);
  }

  /**
   * 获取用户的聊天用户列表
   *
   * @param userId 用户编号
   * @return 用户的聊天对方用户列表
   */
  @GetMapping("chat/getChatList")
  public List<ChatUser> getChatList(@RequestParam("userId") String userId) {
    return chatService.getChatList(userId);
  }

  /**
   * 返回构建与hisUserId聊天框的对方的信息
   *
   * @param myUserId 发起者的编号
   * @param hisUserId 对方的编号
   * @return 对方的信息
   */
  @GetMapping("chat/openSession")
  public ChatUser openSession(
      @RequestParam("myUserId") String myUserId, @RequestParam("hisUserId") String hisUserId) {
    return chatService.getChatUser(myUserId, hisUserId);
  }

  /**
   * 获取与指定用户的从mesgStartIndex开始的mesgNum条聊天记录 * 查看消息后，就将所有消息设置为已查看
   *
   * @param myUserId 自己的用户编号
   * @param hisUserId 对方的用户编号
   * @param mesgStartIndex 消息开始索引
   * @param mesgNum 获取消息的条数
   * @return 从指定索引开始的指定至多指定条数条聊天记录
   */
  @PostMapping("chat/getMesgs")
  public List<Message> getMesgs(
      @RequestParam("myUserId") String myUserId,
      @RequestParam("hisUserId") String hisUserId,
      @RequestParam("mesgStartIndex") int mesgStartIndex,
      @RequestParam("mesgNum") int mesgNum) {
    return chatService.getMesgs(myUserId, hisUserId, mesgStartIndex, mesgNum);
  }

  /**
   * 向指定用户发送消息
   *
   * @param myUserId 本方用户编号
   * @param hisUserId 对方用户编号
   * @param content 消息内容
   * @return 发送成功返回1，否则返回0
   */
  @PostMapping("chat/sendText")
  public String sendText(
      @RequestParam("myUserId") String myUserId,
      @RequestParam("hisUserId") String hisUserId,
      @RequestParam("content") String content) {
    int ret = chatService.sendMessage(myUserId, hisUserId, content);
    return String.valueOf(ret);
  }
}
